using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using JGSY.CMS.LowCode.Platform.Infrastructure.Configuration;
using JGSY.CMS.LowCode.Platform.Infrastructure.HostedServices;

namespace JGSY.CMS.LowCode.Platform.Infrastructure.Configuration.ServiceModules.Modules
{
    /// <summary>
    /// 日志服务模块
    /// 包含Serilog配置、日志优化、日志过滤等日志相关服务
    /// </summary>
    public class LoggingModule : IServiceModule
    {
        public string ModuleName => "日志服务";
        public int Priority => 2; // 仅次于核心服务
        public bool LoadInFastMode => true; // 快速模式需要基本日志
        public ModulePermission RequiredPermission => ModulePermission.LoggingServices;
        public bool IsCriticalModule => true; // 关键模块，即使禁用也保留基本功能

        public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
        {
            // 完整日志功能
            // 使用增强版 Serilog 配置器
            EnhancedSerilogConfigurator.AddLoggingOptimizations(services);
            
            // 添加高性能日志过滤器
            services.AddHighPerformanceLoggingFilters();
            
            // 添加日志性能监控
            services.AddLoggingPerformanceMonitoring();
            
            // 添加结构化日志优化
            services.AddStructuredLoggingOptimizations();
            
            // 添加日志后台服务（非快速模式）
            var isFastStartup = StartupOptimizations.IsFastStartupEnabled(configuration);
            if (!isFastStartup)
            {
                services.AddHostedService<LoggingSinkAttachHostedService>();
            }
        }

        public void ConfigureMinimalServices(IServiceCollection services, IConfiguration configuration)
        {
            // 精简日志功能 - 只保留基本日志和错误日志
            services.AddLogging();
            
            // 基本的日志优化
            EnhancedSerilogConfigurator.AddLoggingOptimizations(services);
        }

        public bool ValidateConfiguration(IConfiguration configuration)
        {
            // 日志服务可以使用默认配置
            return true;
        }
    }
}
